//package top.xierongsheng.user.controller;
//
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import io.swagger.v3.oas.annotations.Operation;
//import io.swagger.v3.oas.annotations.tags.Tag;
//import lombok.RequiredArgsConstructor;
//import org.springframework.validation.annotation.Validated;
//import org.springframework.web.bind.annotation.*;
//import top.xierongsheng.code.CacheVariable;
//import top.xierongsheng.code.R;
//import top.xierongsheng.code.aspect.log.Log;
//import top.xierongsheng.code.aspect.log.LogType;
//import top.xierongsheng.code.aspect.power.RequiresPermissions;
//import top.xierongsheng.code.redis.RedisService;
//import top.xierongsheng.user.dto.RoleResourceDto;
//import top.xierongsheng.user.dto.groups.Create;
//import top.xierongsheng.user.model.SYS_ROLE;
//import top.xierongsheng.user.model.SYS_ROLE_RESOURCE;
//import top.xierongsheng.user.service.IRoleResourceService;
//import top.xierongsheng.user.service.IRoleService;
//import top.xierongsheng.utlis.data.RandomUtil;
//
//import java.util.*;
//
//@RestController //这意味着这个类是一个控制器
//@RequestMapping(path = "/roleResource") //这意味着URL以/roleResource开头（在应用程序路径之后）
//@RequiredArgsConstructor
//@CrossOrigin
//@Tag(name = "角色资源接口")
//public class RoleResourceController {
//
//    private final IRoleResourceService roleResourceService;
//
//    private final IRoleService roleService;
//
//    private final RedisService redisService;
//
//    /**
//     * 分配角色权限
//     *
//     * @param userId
//     * @param roleResourceDto
//     * @return
//     */
//    @PostMapping(path = "/assignPermissions", consumes = {"application/json", "application/x-www-form-urlencoded"})
//    @Log(type = LogType.web, desc = "权限表-分配权限")
//    @RequiresPermissions("rolePermissions")
//    @Operation(summary = "分配角色权限")
//    public R assignPermissions(@RequestHeader(name = "userId") String userId, @RequestBody @Validated(Create.class) RoleResourceDto roleResourceDto) {
//        List<String> addIds = Arrays.asList(roleResourceDto.getAddResourceId().split(","));
//        List<String> delIds = Arrays.asList(roleResourceDto.getDelResourceId().split(","));
//        List<String> errMap = new ArrayList<String>();
//        for (String id : addIds) {
//            if (!id.trim().isEmpty()) {
//                SYS_ROLE_RESOURCE sysRoleResource = roleResourceService.getOne(new QueryWrapper<SYS_ROLE_RESOURCE>().lambda().and(i -> i.eq(SYS_ROLE_RESOURCE::getRoleId, roleResourceDto.getRoleId()).eq(SYS_ROLE_RESOURCE::getResourceId, id)));
//                if (sysRoleResource != null) {
//                    errMap.add("[" + id + "]该角色已拥有该资源权限，请勿重复添加");
//                } else {
//                    SYS_ROLE_RESOURCE sysRoleResource2 = new SYS_ROLE_RESOURCE();
//                    sysRoleResource2.setId(RandomUtil.getUUID());
//                    sysRoleResource2.setRoleId(roleResourceDto.getRoleId());
//                    sysRoleResource2.setResourceId(id);
//                    boolean b = roleResourceService.save(sysRoleResource2);
//                    if (!b) {
//                        errMap.add("[" + id + "]该资源加入失败");
//                    }
//                }
//            }
//        }
//        for (String id : delIds) {
//            if (!id.trim().isEmpty()) {
//                boolean b = roleResourceService.delPermission(roleResourceDto.getRoleId(), id);
//                if (!b) {
//                    errMap.add("[" + id + "]该资源移除失败");
//                }
//            }
//        }
//
//        //角色权限更改缓存池的角色权限同时进行更新
//        ////拉取角色权限列表
//        List<HashMap> menuList = roleResourceService.getMenuByRoleId(roleResourceDto.getRoleId());
//        ////获取角色权限缓存池过期时间
//        long expire = redisService.getKeyExpire(CacheVariable.ROLE_RESOURCE + roleResourceDto.getRoleId());
//        //重新写入缓存
//        redisService.set(CacheVariable.ROLE_RESOURCE + roleResourceDto.getRoleId(), menuList, expire > 0 ? expire : CacheVariable.ROLE_RESOURCE_EXPIRE);
//
//        if (errMap.size() > 0) {
//            return R.fail("角色权限分配失败").zip("data", errMap);
//        } else {
//            return R.ok("角色权限分配成功");
//        }
//    }
//
//    /**
//     * 根据角色id获取角色权限列表
//     *
//     * @param userId
//     * @param id
//     * @return
//     * @auther 谢荣生
//     * @datetime 2020/11/19 15:01
//     */
//    @GetMapping(path = "getRoleResourceById")
//    @Operation(summary = "根据角色id获取角色权限列表")
//    public
//    R getRoleResourceById(@RequestHeader(name = "userId") String userId, @RequestParam String id) {
//        if (id == null || id.trim().isEmpty()) {
//            return R.fail("id不允许为空");
//        }
//        SYS_ROLE sysRole = roleService.getById(id);
//        if (sysRole == null) {
//            return R.fail("角色不存在");
//        }
//        List<HashMap> menuList = roleResourceService.getMenuByRoleId(id);
//        return R.ok().zip("data", menuList);
//    }
//}
